﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace RoughHtml.w3c
{
    public class CSSParseException : CSSException
    {
        private String uri;
        private int lineNumber;
        private int columnNumber;

        /**
         * Create a new CSSParseException from a message and a Locator.
         *
         * <p>This constructor is especially useful when an application is
         * creating its own exception from within a DocumentHandler
         * callback.</p>
         *
         * @param message The error or warning message.
         * @param locator The locator object for the error or warning.
         * @see Locator
         * @see Parser#setLocale 
         */
        public CSSParseException(String message, Locator locator):base(message)
        {
        
            this.code = SAC_SYNTAX_ERR;
            this.uri = locator.getURI();
            this.lineNumber = locator.getLineNumber();
            this.columnNumber = locator.getColumnNumber();
        }


        /**

         * Wrap an existing exception in a CSSParseException.
         *
         * <p>This constructor is especially useful when an application is
         * creating its own exception from within a DocumentHandler
         * callback, and needs to wrap an existing exception that is not a
         * subclass of CSSException.</p>
         *
         * @param message The error or warning message, or null to
         *                use the message from the embedded exception.
         * @param locator The locator object for the error or warning.
         * @param e Any exception
         * @see Locator
         * @see Parser#setLocale
         */
        public CSSParseException(String message, Locator locator,
                     Exception e)
            : base(SAC_SYNTAX_ERR, message, e)
        {
            
            this.uri = locator.getURI();
            this.lineNumber = locator.getLineNumber();
            this.columnNumber = locator.getColumnNumber();
        }


        /**
         * Create a new CSSParseException.
         *
         * <p>This constructor is most useful for parser writers.</p>
         *
         * <p>the parser must resolve the URI fully before creating the exception.</p>
         *
         * @param message The error or warning message.
         * @param uri The URI of the document that generated the error or warning.
         * @param lineNumber The line number of the end of the text that
         *                   caused the error or warning.
         * @param columnNumber The column number of the end of the text that
         *                     cause the error or warning.
         * @see Parser#setLocale
         */
        public CSSParseException(String message, String uri,
                     int lineNumber, int columnNumber)
            : base(message)
        {
            
            this.code = SAC_SYNTAX_ERR;
            this.uri = uri;
            this.lineNumber = lineNumber;
            this.columnNumber = columnNumber;
        }

        /**
         * Create a new CSSParseException with an embedded exception.
         *
         * <p>This constructor is most useful for parser writers who
         * need to wrap an exception that is not a subclass of
         * CSSException.</p>
         *
         * <p>The parser must resolve the URI fully before creating the
         * exception.</p>
         *
         * @param message The error or warning message, or null to use
         *                the message from the embedded exception.
         * @param uri The URI of the document that generated
         *                 the error or warning.
         * @param lineNumber The line number of the end of the text that
         *                   caused the error or warning.
         * @param columnNumber The column number of the end of the text that
         *                     cause the error or warning.
         * @param e Another exception to embed in this one.
         * @see Parser#setLocale 
         */
        public CSSParseException(String message, String uri,
                     int lineNumber, int columnNumber, Exception e):base(SAC_SYNTAX_ERR, message, e)
        {
            
            this.uri = uri;
            this.lineNumber = lineNumber;
            this.columnNumber = columnNumber;
        }

        /**
         * Get the URI of the document where the exception occurred.
         *
         * <p>The URI will be resolved fully.</p>
         *
         * @return A string containing the URI, or null
         *         if none is available.
         * @see Locator#getURI
         */
        public String getURI()
        {
            return this.uri;
        }


        /**
         * The line number of the end of the text where the exception occurred.
         *
         * @return An integer representing the line number, or -1
         *         if none is available.
         * @see Locator#getLineNumber
         */
        public int getLineNumber()
        {
            return this.lineNumber;
        }


        /**
         * The column number of the end of the text where the exception occurred.
         *
         * <p>The first column in a line is position 1.</p>
         *
         * @return An integer representing the column number, or -1
         *         if none is available.
         * @see Locator#getColumnNumber
         */
        public int getColumnNumber()
        {
            return this.columnNumber;
        }
    }
}
